package com.danbay.framework.kafka;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

/**
 * @author SJG
 *         2018/1/4.
 */
@Data
public class AccessHeader {

    /**
     * 消息版本号，固定为1
     */
    @JsonProperty("Version")
    private int version = 1;

    /**
     * 消息类型，分为请求（0）、应答（1）
     */
    @JsonProperty("Type")
    private int type;

    /**
     * 消息序号，主要用于业务处做消息重发、异常处理使用
     */
    @JsonProperty("Sequence")
    private long sequence;


    /**
     * 消息时间戳。主要用于跟踪消息分发效率、系统调优参考
     */
    @JsonProperty("Timestamp")
    private long timestamp;


    /**
     * 目标主题名
     */
    @JsonProperty("TopicName")
    private String topicName;

    /**
     * OAuth相关的认证Token，长度固定为36字节（仅接入服务发送给云端的请求消息使用）
     */
    @JsonProperty("OAuthToken")
    private String oauthToken="";

    /**
     * 错误码。0，成功；1，未知错误；2，Token无效（仅应答方使用）；3，报文解析错误
     */
    @JsonProperty("ErrorCode")
    private int errorCode;

    /**
     * 错误信息，描述具体的错误信息（仅应答方使用）
     */
    @JsonProperty("ErrorMsg")
    private String errorMsg="success";

    /**
     * 校验header
     * @return 错误信息
     */
    public String validate() {
        if (type != AccessPackage.MESSAGE_TYPE_REQUEST && type != AccessPackage.MESSAGE_TYPE_RESPONSE) {
            return "消息类型:" + type + "不正确,应为0或1";
        }
        return null;
    }
}
